﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="ICompoundUseCase.cs" company="">
//   
// </copyright>
// <summary>
//   The CompoundUseCase interface.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Libium.UseCases
{
    using System;
    using System.Collections.Generic;

    /// <summary>
    ///   The CompoundUseCase interface.
    /// </summary>
    public interface ICompoundUseCase : IUseCase
    {
        #region Public Events

        /// <summary>
        ///   The active use case changed.
        /// </summary>
        event Action<ICompoundUseCase> ActiveUseCaseChanged;

        /// <summary>
        ///   The use case added.
        /// </summary>
        event Action<ICompoundUseCase, IUseCase> UseCaseAdded;

        /// <summary>
        ///   The use case deleted.
        /// </summary>
        event Action<ICompoundUseCase, IUseCase> UseCaseDeleted;

        #endregion

        #region Public Properties

        /// <summary>
        ///   Gets the active use case.
        /// </summary>
        IUseCase ActiveUseCase { get; }

        /// <summary>
        ///   Gets the use cases.
        /// </summary>
        ICollection<IUseCase> UseCases { get; }

        #endregion

        #region Public Methods and Operators

        /// <summary>
        /// The add use case.
        /// </summary>
        /// <param name="useCase">
        /// The use case. 
        /// </param>
        void AddUseCase(IUseCase useCase);

        /// <summary>
        /// The delete use case.
        /// </summary>
        /// <param name="useCase">
        /// The use case. 
        /// </param>
        void DeleteUseCase(IUseCase useCase);

        #endregion
    }
}